<

iOS および Android では、安全でない HTTP 接続がデフォルトで無効になっています

まとめ

コードがホストへの HTTP 接続を開こうとした場合 iOS または Android では、StateExceptionで投げられるようになりました 次のメッセージ:

Insecure HTTP is not allowed by platform: <host>

代わりに HTTPS を使用してください。

コンテクスト

アンドロイドから始めるAPI 28とiOS9、 これらのプラットフォームでは、安全でない HTTP 接続がデフォルトで無効になっています。

この変更により、Flutter は安全でない接続も無効にします。 モバイルプラットフォーム。他のプラットフォーム (デスクトップ、Web など) 影響を受けません。

次のようにして、この動作をオーバーライドできます。 ドメイン固有を定義するためのプラットフォーム固有のガイドライン ネットワークポリシー。詳細については、以下の移行ガイドを参照してください。

プラットフォームと同様に、アプリケーションも引き続き開くことができます 安全でないソケット接続。 Flutter は強制しません ソケットレベルのポリシー。あなたはそうでしょう 接続を保護する責任があります。

移行ガイド

iOS では、次のことを追加できますNSExceptionDomainsあなたへ アプリケーションの Info.plist。

Android では、ネットワークセキュリティ構成XML。 Flutter が XML ファイルを見つけるには、metadataへのエントリー<application>マニフェスト内のタグ。 このメタデータ エントリには次の名前を付ける必要があります。io.flutter.network-policyが含まれている必要があります XMLのリソース識別子。

たとえば、XML 設定を以下に置くと、res/xml/network_security_config.xml、 マニフェストには次のものが含まれます。

<application ...>
  ...
  <meta-data android:name="io.flutter.network-policy"
             android:resource="@xml/network_security_config"/>
</application>

デバッグビルドのクリアテキスト接続を許可する

Android デバッグ用に HTTP 接続を許可したい場合 ビルドする場合は、次のスニペットを $project_path\android\app\src\debug\AndroidManifest.xml に追加できます。

<application android:usesCleartextTraffic="true"/>

iOSの場合は、次の手順を実行できますこれらの指示を作成するInfo-debug.plistこれを次のように入力します。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

私たちしないリリース ビルドに対してこれを行うことをお勧めします。

追加情報

  • 変更する唯一の方法はビルド時の構成です ネットワークポリシー。実行時に変更することはできません。
  • ローカルホスト接続は常に許可されます。
  • 安全でない接続はドメインに対してのみ許可できます。 特定の IP アドレスは入力として受け入れられません。 これはプラットフォームのサポート内容と一致しています。もしそうしていただければ IP アドレスを許可したい場合、唯一のオプションは許可することです アプリ内のクリアテキスト接続。

タイムライン

リリースされたバージョン: 1.23
安定版リリース: 2.0.0
バージョンで元に戻されました: 2.2.0 (提案)

参考文献

API ドキュメント: この変更に対応する API はありません。 ネットワーク ポリシーの変更は、 上で詳しく説明したプラットフォーム固有の構成。

関連する PR:

  • PR 20218: ドメイン ネットワーク ポリシーを設定するための配管
  • 厳密に安全な接続のためのドメインごとのポリシーの導入